﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DominioSATT;
using RepositorioSATT.Conexiones;
using System.Data;

namespace RepositorioSATT
{
    public class EventoRepositorio : IEventoRepositorio, IMapeadorFila<Evento>
    {
        protected Conexion conn;
        protected string sql;
        public EventoRepositorio()
        {
            conn = new Conexion();
        }

        #region Miembros de IEventoRepositorio

        public List<String> Listar()
        {
            sql = " Select Nombre From Eventos ";
            DataTable dt = conn.Listar(sql);
            List<string> Lista = new List<string>();
            foreach (System.Data.DataRow dr in dt.Rows)
            {
                Lista.Add(dr["Nombre"].ToString());
            }
            return Lista;
        }

        public Evento Obtener(int Id)
        {
            sql = " Select * From Eventos Where IdEvento = " + Id;
            DataRow dr = conn.Buscar(sql);
            return this.MapearTabla(dr);
        }

        public int Agregar(Evento Objeto)
        {
            string valores = Objeto.Anfitrion.Idclub + ",'" + string.Format("{0:yyyyMMdd}",Objeto.FechaInicio) + "','" + string.Format("{0:yyyyMMdd}",Objeto.FechaFin) + "','" + Objeto.Nombre + "','" + Objeto.Estado.ToString() + "'";
            return conn.Agregar("Eventos", "IdClub,FecInicio,FecFin,Nombre,Estado", valores);
        }

        public void Modificar(Evento Objeto)
        {
            sql = " Update Eventos Set IdClub = " + Objeto.Anfitrion.Idclub + ", FecInicio = '" + string.Format("{0:yyyyMMdd}",Objeto.FechaInicio) + "', FecFin = '" + string.Format("{0:yyyyMMdd}",Objeto.FechaFin) + "', Nombre = '" + Objeto.Nombre + "', Estado = '" + Objeto.Estado.ToString() + "' Where IdEvento = " + Objeto.Id;
            conn.ActualizarOEliminar(sql);
        }

        public int ObtenerId(string Nombre)
        {
            sql = " Select IdEvento From Eventos Where Nombre = '" + Nombre + "'";
            DataRow dr = conn.Buscar(sql);
            if (dr != null)
                return Convert.ToInt32(dr["IdEvento"]);
            else
                return -1;
        }

        public DataTable HistorialJugador(int id)
        {
            sql = " SELECT P.dni as NroJugador,P.Nombre + ' ' + P.Apellido as Apellido,P.FechaNac,C.NOMBRE AS Categoria,PG FROM PERSONA P  INNER JOIN JUGADORCATEGORIA J ON P.DNI = J.DNI INNER JOIN CATEGORIAS C ON J.IDCATEGORIA = C.IDCATEGORIA";
            DataTable dt = conn.Listar(sql);
            return dt;
        }

        public DataTable HistorialArbitro(int id)
        {
            sql = " select E.Nombre as Evento,s.Nombre as Sede,P.Fecha as FechaPartido,p.Resultado,P.Estado from partidos p inner join torneos t on p.idtorneo = t.idtorneo inner join eventos e on t.idevento = e.idevento inner join sedes s on p.idsede = s.idsede where p.DniAbitro = " + id;
            DataTable dt = conn.Listar(sql);
            return dt;
        }

        #endregion

        #region Miembros de IMapeadorFila<Evento>

        public Evento MapearTabla(System.Data.DataRow fila)
        {
            Evento retorno = null;
            if (fila != null)
            {
                IClubRepositorio repoClub = new ClubRepositorio();
                Club bClub = repoClub.Buscar(Convert.ToInt32(fila["IdClub"]));
                retorno = new Evento((fila.IsNull("IdEvento") == true ? 0 : Convert.ToInt32(fila["IdEvento"])),
                    bClub, (fila.IsNull("Nombre") == true ? string.Empty : fila["Nombre"].ToString()), 
                    (fila.IsNull("FecInicio") == true ? DateTime.Now : Convert.ToDateTime(fila["FecInicio"])),
                    (fila.IsNull("FecFin") == true ? DateTime.Now : Convert.ToDateTime(fila["FecFin"])),
                    (fila.IsNull("Estado") == true ? false : Convert.ToBoolean(fila["Estado"])));
            }
            return retorno;
        }

        #endregion

    }
}
